#! /usr/bin/env python
# coding=utf-8


from barcode_checking import *
from Bio import SeqIO
import os

# 提取正确长度的consensus 
# Proper Length Consenus



import sys
import argparse
from argparse import RawTextHelpFormatter

parser = argparse.ArgumentParser(
    description='''
    对NGSpeciesID找出正常长度且可翻译的 consensus
    这会生成一个表格 每个cluster都有 有reads数 是否长度正常 长度是多少 是否可翻译
    用法:
    barcoding_Proper_Length_Consenus.py -i ngsp_out -t 5 -o every_cluster_result1.tsv
    由大天才于2021年7月19日创建于浙江农业大学''',formatter_class=RawTextHelpFormatter)

parser.add_argument('-i',
                help='必须给定，run_NGSpeciesID.py的输出路径')

parser.add_argument('-t',
                help='可选, NCBI的翻译 table 默认为5 无脊椎动物线粒体')


parser.add_argument('-o',
                help='必须给定，输出的表格')




args = parser.parse_args()

if not args.i or not args.o:

    parser.print_help()

    sys.exit()

if not args.t:
	table = 5
else:
	table= args.t

infile = args.i

outfile = args.o



outfile = open(outfile,'w')
outfile.write('specimen_name\tcluster_name\treads_nub\tlength\tseq_translation_check\n')

nn = 0

for sp_name in os.listdir(infile):
	nn +=1	
	if nn % 1000 ==0:
		print(nn)
	p = infile+'/'+sp_name

	for j in os.listdir(p):

		if j.find('consensus_reference_')==0 and j.split('.')[-1]=='fasta':
			cluster_name = sp_name+'|'+j.split('.fasta')[0]

			s = next(SeqIO.parse(p+'/'+j,'fasta'))
			seq_id = s.name
			read_nub = str(int(s.name.split('_reads_')[-1]))
		
			n = str(check_N(s.seq))
			translation = str((check_consensus_by_translation(s.seq,table=table)!=False))

			outfile.write('\t'.join([sp_name,cluster_name,read_nub,str(len(s.seq)),translation])+'\n')
			
outfile.close()